<?php
/**
 * Description of PessoaDAO
 *
 * @author Magno
 */
class EnderecoDAO {

    private $conexao;
    public function __construct() {
        $this->conexao = Conexao::getConexao();
    }

    public function salvar($endereco) {

        try {

            if($this->existe($endereco->getPessoa()->getCliente()->getUsuarioID())) {
                $statment = $this->conexao->prepare("UPDATE endereco SET
                        logradouro = :logradouro,
                        numero = :numero,
                        complemento = :complemento,
                        bairro = :bairro,
                        cep = :cep,
                        cidadeID = :cidadeID
                        WHERE usuarioID = :usuarioID");

            }else {
                $statment = $this->conexao->prepare("INSERT INTO endereco(usuarioID,logradouro,numero,complemento,bairro,cep,cidadeID) VALUES (:usuarioID,:logradouro,:numero,:complemento,:bairro,:cep,:cidadeID);");
            }
            
            if($statment->execute($endereco->toBD())) {
                return $endereco;

            }else {
                $erros = $statment->errorInfo();
                throw new Exception("Erro EnderecoDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro EnderecoDAO:".$err->getMessage());
        }

    }

    public function excluir($usuarioID) {

        try {

            $statment = $this->conexao->prepare("DELETE FROM endereco WHERE usuarioID = :usuarioID");
            $statment->bindParam(':usuarioID',$usuarioID);

            if(!$statment->execute()) {
                $erros = $statment->errorInfo();
                throw new Exception("Erro EnderecoDAO: ".$erros[2]);
            }

        }catch(PDOException $err) {
            throw new Exception("Erro EnderecoDAO:".$err->getMessage());
        }

    }

    public function listar($pagina = 0,$cep = "", $cidadeID = 0, $carregarDependencias = false) {
        try {

            $cidadeDAO = new CidadeDAO();

            $limite = Util::getPaginacao($pagina);
            $where = $this->getWhere($cep,$cidadeID);
            $enderecos = array();
            $statment = $this->conexao->query( "SELECT * FROM endereco c $where $limite" );

            foreach ( $statment->fetchAll(PDO::FETCH_SERIALIZE) as $row ) {
                $endereco = new EnderecoBean(null, $row['logradouro'], $row['numero'], $row['complemento'], $row['bairro'], $row['cep']);

                if($carregarDependencias){
                    $endereco->setCidade($cidadeDAO->buscarPorID($row['cidadeID'],$carregarDependencias));
                }
                
                $enderecos[] = $endereco;
            }

            return $enderecos;

        }catch(PDOException $err) {
            throw new Exception("Erro EnderecoDAO:".$err->getMessage());
        }
    }

    public function buscarPorID($usuarioID, $carregarDependencias = false) {
        try {
            $cidadeDAO = new CidadeDAO();
            $row = $this->conexao->query("SELECT * FROM endereco WHERE usuarioID = $usuarioID ")->fetch(PDO::FETCH_SERIALIZE);

            if(isset($row['usuarioID']) && $row['usuarioID'] > 0) {
                $endereco = new EnderecoBean(null, $row['logradouro'], $row['numero'], $row['complemento'], $row['bairro'], $row['cep']);

                if($carregarDependencias){
                    $endereco->setCidade($cidadeDAO->buscarPorID($row['cidadeID'],$carregarDependencias));
                }
                return $endereco;
            }else {
                return null;
            }


        }catch(PDOException $err) {
            throw new Exception("Erro EnderecoDAO:".$err->getMessage());
        }
    }

    public function existe($usuarioID){
        if($this->buscarPorID($usuarioID) != null)
            return true;
        return false;
    }

    private function getWhere($cep = "",$cidadeID = 0) {
        $where = " WHERE 1 = 1 ";

        if (isset ($cep) && strlen($cep) > 0) {
            $where = $where." AND c.cep = '$cep' ";
        }

        if (isset ($cidadeID) && $cidadeID > 0) {
            $where = $where." AND c.cidadeID = $cidadeID ";
        }

        return $where;
    }

    public function total($cep = "",$cidadeID = 0) {
        try {

            $where = $this->getWhere($cep,$cidadeID);
            $total = $this->conexao->query( "SELECT COUNT(c.usuarioID) total FROM endereco c $where" )->fetch(PDO::FETCH_COLUMN);
            return $total;

        }catch(PDOException $err) {
            throw new Exception("Erro EnderecoDAO:".$err->getMessage());
        }
    }

}
?>